package com.zy.explore.license.infrastructure.util;

import com.github.javafaker.Faker;

import java.security.SecureRandom;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;

/**
 * 假数据制造工具
 *
 * @author ChinaYin  主页:https://gitee.com/zy-explorej2ee 邮箱:zyexplorej2ee@sina.com
 * @date 2021年06月13日 15:09:04
 */
public class FakerUtil {

    private static final Faker FAKER = new Faker(new Locale("zh-CN"));

    private static final List<String> FAMILY_NAME_LIST = Arrays.asList("赵", "钱", "孙", "李", "周", "吴", "郑",
            "王", "冯", "陈", "褚", "卫", "蒋", "沈", "韩", "杨", "朱", "秦", "尤", "许", "何", "吕", "施", "张", "孔",
            "曹", "严", "华", "金", "魏", "陶", "姜", "戚", "谢", "邹", "喻", "柏", "水", "窦", "章", "云", "苏", "潘",
            "葛", "奚", "范", "彭", "郎", "鲁", "韦", "昌", "马", "苗", "凤", "花", "方", "俞", "任", "袁", "柳", "酆",
            "鲍", "史", "唐", "费", "廉", "岑", "薛", "雷", "贺", "倪", "汤", "滕", "殷", "罗", "毕", "郝", "邬", "安",
            "常", "乐", "于", "时", "傅", "皮", "卞", "齐", "康", "伍", "余", "元", "卜", "顾", "孟", "平", "黄", "和",
            "穆", "萧", "尹", "姚", "邵", "湛", "汪", "祁", "毛", "禹", "狄", "米", "贝", "明", "臧", "计", "伏", "成",
            "戴", "谈", "宋", "茅", "庞", "熊", "纪", "舒", "屈", "项", "祝", "董", "梁", "杜", "阮", "蓝", "闵", "席",
            "季", "麻", "强", "贾", "路", "娄", "危", "江", "童", "颜", "郭", "梅", "盛", "林", "刁", "钟", "徐", "邱",
            "骆", "高", "夏", "蔡", "田", "樊", "胡", "凌", "霍", "欧阳", "上官", "司马", "东方", "独孤", "南宫", "太史",
            "皇甫", "司空", "夏侯", "诸葛", "尉迟", "澹台", "公孙", "慕容", "长孙", "宇文", "司徒", "公良", "轩辕", "令狐",
            "呼延", "西门", "完颜", "百里");

    private static final List<String> FIRST_NAME_LIST = Arrays.asList("睿", "浩", "博", "瑞", "昊", "悦", "妍", "涵",
            "玥", "蕊", "子", "梓", "浩", "宇", "俊", "轩", "宇", "泽", "杰", "豪", "雨", "梓", "欣", "子", "思", "萱",
            "怡", "彤", "琪", "浩宇", "子轩", "浩然", "雨泽", "宇轩", "子涵", "欣怡", "子涵", "梓涵", "雨涵", "可馨", "诗涵",
            "清", "兴", "俊", "丰", "旺", "倩", "诚", "然", "仁", "媚", "道", "良", "思", "娟", "耀", "贤", "睿", "兰",
            "安", "石", "文", "悟", "泰", "英", "通", "悉", "达", "勤", "婉", "焕", "伦", "和", "轩", "妯", "妩", "健",
            "姿", "武", "坦", "挺", "敦", "威", "松", "锐", "学", "伟", "盈", "静", "婵", "秀", "析", "晰", "巍", "柏",
            "晓", "维", "余", "华", "姣", "正", "壮", "哲", "盛", "直", "显", "康", "婷", "义", "蔼", "顺", "山", "昌",
            "荣", "慧", "定", "雄", "迪", "容", "灵", "德", "颖", "书", "宁", "明");

    public static String fakerChNormalName() {
        return FAKER.name().fullName();
    }

    public static String fakerChMobilePhone() {
        return FAKER.phoneNumber().cellPhone();
    }

    public static String fakerChTelePhone() {
        return FAKER.phoneNumber().phoneNumber();
    }

    public static String fakerChAddress() {
        return FAKER.address().fullAddress();
    }

    public static String fakerBeautyName() {
        List<Integer> seeds = Arrays.asList(3, 4);
        SecureRandom random = new SecureRandom();
        int n = random.nextInt(seeds.size());
        return fakerBeautyName(seeds.get(n));
    }

    public static String fakerBeautyName(int nameLength) {
        SecureRandom random = new SecureRandom();
        while (true) {
            int i = random.nextInt(FAMILY_NAME_LIST.size());
            String familyName = FAMILY_NAME_LIST.get(i);
            int j = random.nextInt(FIRST_NAME_LIST.size());
            String firstName = FIRST_NAME_LIST.get(j);
            if ((familyName + firstName).length() == nameLength && !familyName.contains(firstName) && !firstName.contains(familyName)) {
                return familyName + firstName;
            }
        }
    }
}
